package com.cskaoyan.javase.oop2._1extends._5protected._1two;

import com.cskaoyan.javase.oop2._1extends._5protected._0one.CurrentClazz;
import com.cskaoyan.javase.oop2._1extends._5protected._0one.SamePackageSonClazz;

/**
 * 不同包下的子类
 * 根据定义，这里可以访问父类中的受保护成员
 *
 * 在这里创建对象，访问父类中的受保护成员，有几种方式？
 *      1.创建父类对象访问
 *          不行，不能创建父类对象，去访问父类对象当中的受保护成员
 *
 *      2.创建自身类对象访问（子类可以继承父类成员）
 *          可以，可以创建自身对象，访问从父类那里继承过来的受保护成员
 *
 *      3.创建“兄弟姐妹”对象，访问它们继承自父类的受保护成员
 *          不可用，不能创建“兄弟姐妹”对象，访问它们继承自父类的受保护成员
 *
 * 以上三种方式测试，得出结论：
 *      在不同包下子类中，只有创建子类自身对象
 *      才能够访问从父类当中继承过来的受保护成员
 *      仅此一种方式，别的方式都不行！
 *
 * @since 14:54
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class AnotherPackageSonClazz extends CurrentClazz {
    public static void main(String[] args) {
        // 1.创建父类对象访问
        CurrentClazz cc = new CurrentClazz();
        // 'num' has protected access in 'com.cskaoyan.javase.oop2._1extends._5protected._0one.CurrentClazz'
        // System.out.println(cc.num);


        // 2.创建自身类对象访问（子类可以继承父类成员）
        AnotherPackageSonClazz apsc = new AnotherPackageSonClazz();
        System.out.println(apsc.num);

        // 3.创建“兄弟姐妹”对象，访问它们继承自父类的受保护成员
        SamePackageSonClazz sp = new SamePackageSonClazz();
        // System.out.println(sp.num);
    }

    // 成员方法有隐含的this，指向当前对象
    public void test(){
        System.out.println(this.num);
    }
}
